package catalogo.dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import catalogo.entidades.Receta;

@Repository
public class RecetaDAOImpl implements RecetaDAO
{
	@Autowired
	private SessionFactory sessionFactory;
	/*
	 * Session manager para realizar las transacciones
	 */
	
	public SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	public void setSessionFactory(SessionFactory sessionFactory)
	{
		this.sessionFactory = sessionFactory;
	}
	
	@Override
	public void InsertarReceta(Receta receta)
	{
		sessionFactory.getCurrentSession().save(receta);
	}
	
	@Override
	public void ModificarReceta(Receta receta)
	{
		sessionFactory.getCurrentSession().update(receta);
	}
	
	
	@Override
	public void EliminarReceta(Receta receta)
	{
		sessionFactory.getCurrentSession().delete(receta);
	}
	

	@Override
	public Receta BuscarRecetaPorIdReceta(String idReceta)
	{
		Session session = sessionFactory.getCurrentSession();
//		session.beginTransaction();
		Query query =session.createQuery("from Receta where idReceta = ?");
		query.setParameter(0, idReceta);
		Receta resultado = (Receta) query.uniqueResult();
		return resultado;
		/*
		 List list = sessionFactory.getCurrentSession().createQuery("from Receta where idReceta=?").setParameter(0, idReceta).list();
	    return (Receta)list.get(0);*/
		
	}
	
	@SuppressWarnings("unchecked")
	public List<Receta> obtenerTodasLasRecetas()
	{
		
		List<Receta> resultado =sessionFactory.getCurrentSession().createQuery("from Receta").list();
		return resultado;
	}
	
	
	@SuppressWarnings("unchecked")
	public List<Receta> BuscarRecetaPorNombre(String nombreReceta)
	{
		Session session = sessionFactory.getCurrentSession();
//		session.beginTransaction();
		Query query = session.createQuery("from Receta where nombreReceta=?");
		query.setParameter(0,nombreReceta).list();
		List<Receta> recetas = query.list();
		return recetas;
		
		/*List<Receta> list = sessionFactory.getCurrentSession().createQuery("from Receta where nombreReceta=?").setParameter(0,nombreReceta).list();
	     
		return list;*/
	}
	
	@SuppressWarnings("unchecked")
	public List<Receta> BuscarRecetaPorTipo(String tipoReceta)
	{
		Session session = sessionFactory.getCurrentSession();
//		session.beginTransaction();
		Query query = session.createQuery("from Receta where tipo=?");
		query.setParameter(0,tipoReceta).list();
		List<Receta> recetas = query.list();
		
		return recetas;
		
		/*
		 * *
		List<Receta> list = sessionFactory.getCurrentSession().createQuery("from Receta where nombreReceta=?").setParameter(0,tipoReceta).list();
	     
		return list;*/
	}
	
	@SuppressWarnings("unchecked")
	public List<Receta> BuscarRecetaPorNombre_Tipo(String nombreReceta,String id_tipo)
	{
		Session session = sessionFactory.getCurrentSession();
//		session.beginTransaction();
		Query query = session.createQuery("from Receta where nombreReceta = ? and id_tipo = ?");
		query.setParameter(0, nombreReceta);
		query.setParameter(1, id_tipo );
		List<Receta> receta= query.list();
		System.out.println("DAOIMPL" + receta.toString());
		return receta;
		
		/*List<Receta> list = sessionFactory.getCurrentSession().createQuery("from Receta where nombreReceta=? and tipoReceta=?").setString(nombreReceta, tipoReceta).list();
		     
		return list;*/
		
		/*String hql = "from Stock s where s.stockName = ? and s.stockCode = ?";
		List result = session.createQuery(hql)
		.setParameter(0, "DIALOG")
		.setString(1, "7277")
		.list();*/
	}
	

	/*@Override
	public List<Receta> obtenerRecetas() {
		// TODO Auto-generated method stub
		return null;
	}*/

}
